/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.Busquedas;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.Calendar;
import com.sun.rave.web.ui.component.DropDown;
import com.sun.rave.web.ui.component.TextField;
import com.sun.rave.web.ui.model.Option;
import com.sun.rave.web.ui.model.SingleSelectOptionsList;
import java.sql.SQLException;
import java.util.Date;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.convert.DateTimeConverter;
import wasolicitudesfiec.ApplicationBean1;
import wasolicitudesfiec.Busquedas.dataproviders.SolicitudDataProvider;
import wasolicitudesfiec.Menu;
import wasolicitudesfiec.RequestBean1;
import wasolicitudesfiec.SessionBean1;
import wasolicitudesfiec.logicacontrol.Logica;
import wasolicitudesfiec.logicacontrol.Logica.LogBusquedaSolicitud;
import wasolicitudesfiec.registros.Rg_Solicitud;
import web.util.Constantes;
import web.util.Constantes.EstadoSolicitud;
import web.util.Constantes.TipoSolicitud;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version ConsultarSolicitudes.java
 * @version Created on 13-ene-2009, 14:49:42
 * @author Administrador
 */
public class ConsultarSolicitudes extends AbstractPageBean {
	// <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

	/**
	 * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
	 * This method is automatically generated, so any user-specified code inserted
	 * here is subject to being replaced.</p>
	 */
	private void _init() throws Exception {
		dateTimeConverter1.setTimeZone(java.util.TimeZone.getTimeZone("America/Guayaquil"));
		dateTimeConverter1.setLocale(new java.util.Locale("es", "EC", ""));
		dateTimeConverter1.setPattern("dd/MM/yyyy HH:mm");
	}
	private DropDown ddlTipoSolicitud = new DropDown();

	public DropDown getDdlTipoSolicitud() {
		return ddlTipoSolicitud;
	}

	public void setDdlTipoSolicitud(DropDown dd) {
		this.ddlTipoSolicitud = dd;
	}
	private DropDown ddlEstado = new DropDown();

	public DropDown getDdlEstado() {
		return ddlEstado;
	}

	public void setDdlEstado(DropDown dd) {
		this.ddlEstado = dd;
	}
	private TextField txtTitulo = new TextField();

	public TextField getTxtTitulo() {
		return txtTitulo;
	}

	public void setTxtTitulo(TextField tf) {
		this.txtTitulo = tf;
	}
	private TextField txtSolicitante = new TextField();

	public TextField getTxtSolicitante() {
		return txtSolicitante;
	}

	public void setTxtSolicitante(TextField tf) {
		this.txtSolicitante = tf;
	}
	private TextField txtParticipante = new TextField();

	public TextField getTxtParticipante() {
		return txtParticipante;
	}

	public void setTxtParticipante(TextField tf) {
		this.txtParticipante = tf;
	}
	private Calendar calFechaCreacionDesde = new Calendar();

	public Calendar getCalFechaCreacionDesde() {
		return calFechaCreacionDesde;
	}

	public void setCalFechaCreacionDesde(Calendar c) {
		this.calFechaCreacionDesde = c;
	}
	private Calendar calFechaCreacionHasta = new Calendar();

	public Calendar getCalFechaCreacionHasta() {
		return calFechaCreacionHasta;
	}

	public void setCalFechaCreacionHasta(Calendar c) {
		this.calFechaCreacionHasta = c;
	}
	private Calendar calFechaFinalizacionDesde = new Calendar();

	public Calendar getCalFechaFinalizacionDesde() {
		return calFechaFinalizacionDesde;
	}

	public void setCalFechaFinalizacionDesde(Calendar c) {
		this.calFechaFinalizacionDesde = c;
	}
	private Calendar calFechaFinalizacionHasta = new Calendar();

	public Calendar getCalFechaFinalizacionHasta() {
		return calFechaFinalizacionHasta;
	}

	public void setCalFechaFinalizacionHasta(Calendar c) {
		this.calFechaFinalizacionHasta = c;
	}
	private DateTimeConverter dateTimeConverter1 = new DateTimeConverter();

	public DateTimeConverter getDateTimeConverter1() {
		return dateTimeConverter1;
	}

	public void setDateTimeConverter1(DateTimeConverter dtc) {
		this.dateTimeConverter1 = dtc;
	}
	private SolicitudDataProvider provider = new SolicitudDataProvider();

	/**
	 * @return the provider
	 */
	public SolicitudDataProvider getProvider() {
		return provider;
	}

	/**
	 * @param provider the provider to set
	 */
	public void setProvider(SolicitudDataProvider provider) {
		this.provider = provider;
	}
	private SingleSelectOptionsList lstTipoSolicitud = new SingleSelectOptionsList();

	/**
	 * @return the lstTipoSolicitud
	 */
	public SingleSelectOptionsList getLstTipoSolicitud() {
		return lstTipoSolicitud;
	}

	/**
	 * @param lstTipoSolicitud the lstTipoSolicitud to set
	 */
	public void setLstTipoSolicitud(SingleSelectOptionsList lstTipoSolicitud) {
		this.lstTipoSolicitud = lstTipoSolicitud;
	}
	private SingleSelectOptionsList lstEstadoSolicitud = new SingleSelectOptionsList();

	/**
	 * @return the lstEstadoSolicitud
	 */
	public SingleSelectOptionsList getLstEstadoSolicitud() {
		return lstEstadoSolicitud;
	}

	/**
	 * @param lstEstadoSolicitud the lstEstadoSolicitud to set
	 */
	public void setLstEstadoSolicitud(SingleSelectOptionsList lstEstadoSolicitud) {
		this.lstEstadoSolicitud = lstEstadoSolicitud;
	}

	// </editor-fold>
	/**
	 * <p>Construct a new Page bean instance.</p>
	 */
	public ConsultarSolicitudes() {
	}

	/**
	 * <p>Callback method that is called whenever a page is navigated to,
	 * either directly via a URL, or indirectly via page navigation.
	 * Customize this method to acquire resources that will be needed
	 * for event handlers and lifecycle methods, whether or not this
	 * page is performing post back processing.</p>
	 *
	 * <p>Note that, if the current request is a postback, the property
	 * values of the components do <strong>not</strong> represent any
	 * values submitted with this request.  Instead, they represent the
	 * property values that were saved for this view when it was rendered.</p>
	 */
	@Override
	public void init() {
		// Perform initializations inherited from our superclass
		super.init();
		// Perform application initialization that must complete
		// *before* managed components are initialized
		// TODO - add your own initialiation code here

		// <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
		// Initialize automatically managed components
		// *Note* - this logic should NOT be modified
		try {
			_init();
		} catch (Exception e) {
			log("ConsultarSolicitudes Initialization Failure", e);
			throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
		}
		// </editor-fold>
		getMenu().setTitulo("Búsqueda de Solicitudes");
		System.out.println("Init");
		Option[] options = new Option[5];
		options[0] = new Option(Constantes.TipoSolicitud.AperturaPostgrado.name(), Constantes.TipoSolicitud.AperturaPostgrado.toString());
		options[1] = new Option(Constantes.TipoSolicitud.Ayudantia.name(), Constantes.TipoSolicitud.Ayudantia.toString());
		options[2] = new Option(Constantes.TipoSolicitud.CambioCarrera.name(), Constantes.TipoSolicitud.CambioCarrera.toString());
		options[3] = new Option(Constantes.TipoSolicitud.ConvalidacionMateria.name(), Constantes.TipoSolicitud.ConvalidacionMateria.toString());
		options[4] = new Option(Constantes.TipoSolicitud.SerAyudante.name(), Constantes.TipoSolicitud.SerAyudante.toString());
		getLstTipoSolicitud().setOptions(options);
		getDdlTipoSolicitud().setSelected(options[0].getValue());

		options = new Option[4];
		options[0] = new Option("", "Todas");
		options[1] = new Option(Constantes.EstadoSolicitud.Activa.name(), Constantes.EstadoSolicitud.Activa.toString());
		options[2] = new Option(Constantes.EstadoSolicitud.Cancelada.name(), Constantes.EstadoSolicitud.Cancelada.toString());
		options[3] = new Option(Constantes.EstadoSolicitud.Terminada.name(), Constantes.EstadoSolicitud.Terminada.toString().toString());
		getLstEstadoSolicitud().setOptions(options);
		getDdlEstado().setValue(options[0].getValue());
//		ddlTipoSolicitud.getd
	}

	/**
	 * <p>Callback method that is called after the component tree has been
	 * restored, but before any event processing takes place.  This method
	 * will <strong>only</strong> be called on a postback request that
	 * is processing a form submit.  Customize this method to allocate
	 * resources that will be required in your event handlers.</p>
	 */
	@Override
	public void preprocess() {
		System.out.println("Consultar Solicitudes preprocess");
		System.out.println("ddlTipoSolicitud.getSelected(): " + ddlTipoSolicitud.getSelected());
		System.out.println("ddlEstado.getSelected(): " + ddlEstado.getSelected());

	}

	/**
	 * <p>Callback method that is called just before rendering takes place.
	 * This method will <strong>only</strong> be called for the page that
	 * will actually be rendered (and not, for example, on a page that
	 * handled a postback and then navigated to a different page).  Customize
	 * this method to allocate resources that will be required for rendering
	 * this page.</p>
	 */
	@Override
	public void prerender() {
		System.out.println("Consultar Solicitudes prerender");
		System.out.println("ddlTipoSolicitud.getSelected(): " + ddlTipoSolicitud.getSelected());
		System.out.println("ddlEstado.getSelected(): " + ddlEstado.getSelected());

		System.out.println("calFechaCreacionDesde.getValue(): " + calFechaCreacionDesde.getValue());
		System.out.println("calFechaCreacionHasta.getValue(): " + calFechaCreacionHasta.getValue());
		System.out.println("calFechaFinalizacionDesde.getValue():" + calFechaFinalizacionDesde.getValue());
		System.out.println("calFechaFinalizacionHasta.getValue():" + calFechaFinalizacionHasta.getValue());
		System.out.println("txtSolicitante.getValue(): " + txtSolicitante.getValue());
		System.out.println("txtParticipante.getValue(): " + txtParticipante.getValue());
		System.out.println("txtTitulo.getValue():" + txtTitulo.getValue());
		java.sql.Date fechaCreacion_desde = calFechaCreacionDesde.getValue() == null ? null : new java.sql.Date(((Date) calFechaCreacionDesde.getValue()).getTime());
		java.sql.Date fechaCreacion_hasta = calFechaCreacionHasta.getValue() == null ? null : new java.sql.Date(((Date) calFechaCreacionHasta.getValue()).getTime());
		java.sql.Date fechaModificacion_desde = calFechaFinalizacionDesde.getValue() == null ? null : new java.sql.Date(((Date) calFechaFinalizacionDesde.getValue()).getTime());
		java.sql.Date fechaModificacion_hasta = calFechaFinalizacionHasta.getValue() == null ? null : new java.sql.Date(((Date) calFechaFinalizacionHasta.getValue()).getTime());
		EstadoSolicitud estado = null;
		try {
			estado = Constantes.EstadoSolicitud.valueOf((String) ddlEstado.getSelected());
		} catch (IllegalArgumentException e) {
			estado = null;
		}

		String solicitante = (String) txtSolicitante.getValue();
		String participante = (String) txtParticipante.getValue();
		String titulo = (String) txtTitulo.getValue();
		TipoSolicitud tipoSolicitud;
		try {
			tipoSolicitud = Constantes.TipoSolicitud.valueOf((String) ddlTipoSolicitud.getSelected());
		} catch (IllegalArgumentException e) {
			tipoSolicitud = null;
		}
		Vector<Rg_Solicitud> listaActividad;
		try {
			listaActividad = realizarBusqueda(fechaCreacion_desde, fechaCreacion_hasta, fechaModificacion_desde, fechaModificacion_hasta, estado, solicitante, participante, titulo, tipoSolicitud);
			getProvider().setListaSolicitud(listaActividad);
		} catch (SQLException ex) {
			FacesMessage mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocurrio un error en la base de datos", ex.getMessage());
			getFacesContext().addMessage(null, mensaje);
			Logger.getLogger(ConsultarSolicitudes.class.getName()).log(Level.SEVERE, null, ex);
		}

	}

	/**
	 * <p>Callback method that is called after rendering is completed for
	 * this request, if <code>init()</code> was called (regardless of whether
	 * or not this was the page that was actually rendered).  Customize this
	 * method to release resources acquired in the <code>init()</code>,
	 * <code>preprocess()</code>, or <code>prerender()</code> methods (or
	 * acquired during execution of an event handler).</p>
	 */
	@Override
	public void destroy() {
	}

	public Vector<Rg_Solicitud> realizarBusqueda(java.sql.Date fechaCreacion_desde, java.sql.Date fechaCreacion_hasta,
			java.sql.Date fechaModificacion_desde, java.sql.Date fechaModificacion_hasta,
			Constantes.EstadoSolicitud estado,
			String solicitante, String participante,
			String titulo, TipoSolicitud tipoSolicitud) throws SQLException {
		Logica logica = new Logica();
		LogBusquedaSolicitud logBusquedaSolicitud = logica.getLogBusquedaSolicitud();
		String estado2 = estado == null ? null : estado.name();
		Vector<Rg_Solicitud> listaSolicitud = new Vector<Rg_Solicitud>();
		System.out.println("REalizar busqueda");

		System.out.println("fechaCreacion_desde: " + fechaCreacion_desde);
		System.out.println("fechaCreacion_hasta:" + fechaCreacion_hasta);
		System.out.println("fechaModificacion_desde:" + fechaModificacion_desde);
		System.out.println("fechaModificacion_hasta: " + fechaModificacion_hasta);
		System.out.println("estado2 " + estado2);
		System.out.println("solicitante:" + solicitante);
		System.out.println("participante: " + participante);
		System.out.println("titulo: " + titulo);

		if (tipoSolicitud != null) {
			switch (tipoSolicitud) {
				case AperturaPostgrado:
					listaSolicitud = logBusquedaSolicitud.buscarSolicitudAperturaPostgrado(fechaCreacion_desde, fechaCreacion_hasta, fechaModificacion_desde, fechaModificacion_hasta, estado2, solicitante, participante, titulo);
					break;
				case Ayudantia:
					listaSolicitud = logBusquedaSolicitud.buscarSolicitudAyudantia(fechaCreacion_desde, fechaCreacion_hasta, fechaModificacion_desde, fechaModificacion_hasta, estado2, solicitante, participante, titulo);
					break;
				case CambioCarrera:
					listaSolicitud = logBusquedaSolicitud.buscarSolicitudCambioCarrera(fechaCreacion_desde, fechaCreacion_hasta, fechaModificacion_desde, fechaModificacion_hasta, estado2, solicitante, participante, titulo);
					break;
				case ConvalidacionMateria:
					listaSolicitud = logBusquedaSolicitud.buscarSolicitudConvalidacion(fechaCreacion_desde, fechaCreacion_hasta, fechaModificacion_desde, fechaModificacion_hasta, estado2, solicitante, participante, titulo);
					break;
				case SerAyudante:
					listaSolicitud = logBusquedaSolicitud.buscarSolicitudSerAyudante(fechaCreacion_desde, fechaCreacion_hasta, fechaModificacion_desde, fechaModificacion_hasta, estado2, solicitante, participante, titulo);
					break;
			}
		}
		return listaSolicitud;
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected ApplicationBean1 getApplicationBean1() {
		return (ApplicationBean1) getBean("ApplicationBean1");
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected RequestBean1 getRequestBean1() {
		return (RequestBean1) getBean("RequestBean1");
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected SessionBean1 getSessionBean1() {
		return (SessionBean1) getBean("SessionBean1");
	}

	public Menu getMenu() {
		return (Menu) getBean("SolicitudesFIEC$Menu");
	}
}

